home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TeX 1995 July
/
TeX CD-ROM July 1995 (Disc 1)(Walnut Creek)(1995).ISO
/
biblio
/
bibtex
/
contrib
/
abstyles
/
docmac.tex
(
.txt
)
< prev
next >
Wrap
LaTeX Document
|
1991-08-12
|
8KB
|
210 lines
\chardef\escape=0
\chardef\letter=11
\chardef\other=12
%\chardef\active=13 % is defined in Plain already
\chardef\atcode=\catcode`\@
\chardef\uscode=\catcode`\_
\catcode`\@=\letter
\catcode`\_=\letter
\font\tentex=cmtex10 % typewriter extended ASCII 10pt
\let\ttex=\tentex % only for PLAIN with base size 10pt
\def\setup_verbatim{%
\def\do##1{\catcode`##1\other}\dospecials
\parskip\z@skip \parindent\z@
\obeylines \obeyspaces \obeytabs \frenchspacing
\ttex
\let\tab=\space
\begingroup
\catcode`\^^I=\active% % Attention: no tabs!
\gdef\obeytabs{\catcode`\^^I=\active\def^^I{\tab}}
\global\let^^I=\tab% % if an active tab appears in a \write
\endgroup
\let\origvert=|
\chardef\vbar=`\|
\catcode`\|=\active
\def|{%
\leavevmode
\hbox\bgroup
\let\par\space \setup_verbatim
\let|\egroup
\newif\if@print
\def\beginprog{%
\endgraf
\bigbreak
\begingroup
\setup_verbatim \catcode`\|\other
\@printtrue
\ignore_rest_line
\let\end_verbatim=\endgroup % internal command !
\begingroup
\obeylines% % ^^M is active! ==> every line must end with %
\gdef\ignore_rest_line#1^^M{\set_next_line}%
\gdef\set_next_line#1^^M{\do_set{#1}}%
\endgroup
\def\do_set#1{%
\endgraf
\check_print{#1}%
\if@print \indent \print_char#1\end_line\end_line
\else \let\set_next_line\end_verbatim
\fi
\set_next_line
\let\end_line=\relax
\begingroup
\obeyspaces\obeytabs
\gdef\check_print#1{\cut_at_tab#1^^I\end_line}
\gdef\cut_at_tab#1^^I#2\end_line{\check_first_part#1 \end_line}% blank !
\gdef\check_first_part#1 #2\end_line{\do_check{#1}}
\endgroup
\def\do_check#1{%
\def\@line{#1}%
\ifx \@line\@endverbatim \@printfalse
\fi
{\catcode`\|=\escape \catcode`\\=\other % | is temporary escape char
|gdef|@endverbatim{\endprog} % sample line
} % here \endgroup can't be used
\newcount\char_count \char_count\@ne
\def\print_char#1#2\end_line{%
\print_first_char{#1}%
\print_rest_of_line{#2}%
{\obeytabs\gdef\@tab{^^I}}
\def\print_first_char#1{%
\def\@char{#1}%
\advance \char_count\@ne
\ifx \@char\@tab \print_tab
\else \@char
\fi
\newcount\count_mod_viii
\def\mod_viii#1{%
\count@ #1\relax \count_mod_viii\count@
\divide \count@ 8\relax
\multiply \count@ 8\relax
\advance \count_mod_viii -\count@
\def\print_tab{%
\loop \space \mod_viii\char_count
\ifnum \count_mod_viii>\z@
\advance \char_count\@ne
\repeat
\def\print_rest_of_line#1{%
\def\@line{#1}%
\ifx \@line\empty \char_count\@ne
\def\next##1\end_line{\relax}%
\else \let\next\print_char
\fi
\next#1\end_line
\newcount\sectno \sectno=\@ne
\def\chap#1.{%
\mark{\number\sectno}
\endgraf
\vfill\eject
\def\rhead{\uppercase{\ignorespaces#1}} % define running headline
\message{*\number\sectno} % progress report
\let\Z=\let % now you can \send the control sequence \Z
\edef\next{\write\cont{\Z{#1}{\number\sectno}{\the\pageno}}}\next % to contents file
\noindent {\bf \number\sectno.\quad #1.}%
\advance \sectno\@ne
\endgraf
\medskip \nobreak
\everypar{%
\setbox0\lastbox
\global\everypar{}%
}%
\def\sect{%
\mark{\number\sectno}
\endgraf
\vskip 2pc plus 1pc minus 6dd \goodbreak
\noindent {\bf \number\sectno.}\advance \sectno\@ne
\quad \ignorespaces
\parskip 0pt % no stretch between paragraphs
\parindent 1em % for paragraphs and for the first line of Pascal text
\font\eightrm=cmr8
\font\sc=cmcsc10 % this IS a caps-and-small-caps font!
\let\mainfont=\tenrm
\font\titlefont=cmr7 scaled\magstep4 % title on the contents page
\font\ttitlefont=cmtt10 scaled\magstep2 % typewriter type in title
%\font\tentex=cmtex10 % TeX extended character set (used in strings)
% already defined above
\fontdimen7\tentex=0pt % no extra space after punctuation
\def\\#1{\hbox{\it#1\/\kern.05em}} % italic type for identifiers
\def\|#1{\hbox{$#1$}} % one-letter identifiers look a bit better this way
\def\{\hbox{\bf#1\/}} % boldface type for reserved words
\def\.#1{\hbox{\tentex % typewriter type for strings
\let\\=\BS % backslash in a string
\let\'=\RQ % right quote in a string
\let\`=\LQ % left quote in a string
\let\{=\LB % left brace in a string
\let\}=\RB % right brace in a string
\let\~=\TL % tilde in a string
\let\ =\SP % space in a string
\let\_=\UL % underline in a string
\let\&=\AM % ampersand in a string
#1}}
\def\#{\hbox{\tt\char`\#}} % parameter sign
\def\${\hbox{\tt\char`\$}} % dollar sign
\def\%{\hbox{\tt\char`\%}} % percent sign
\def\^{\ifmmode\mathchar"222 \else\char`^ \fi} % pointer or hat
% circumflex accents can be obtained from \^^D instead of \^
\def\AT!{@} % at sign for control text
\chardef\AM=`\& % ampersand character in a string
\chardef\BS=`\\ % backslash in a string
\chardef\LB=`\{ % left brace in a string
\def\LQ{{\tt\char'22}} % left quote in a string
\chardef\RB=`\} % right brace in a string
\def\RQ{{\tt\char'23}} % right quote in a string
\def\SP{{\tt\char`\ }} % (visible) space in a string
\chardef\TL=`\~ % tilde in a string
\chardef\UL=`\_ % underline character in a string
\newdimen\pagewidth \pagewidth=6.5in % the width of each page
\newdimen\pageheight \pageheight=8.7in % the height of each page
\newdimen\fullpageheight \fullpageheight=9in % page height including headlines
\newdimen\pageshift \pageshift=0in % shift righthand pages wrt lefthand ones
\def\magnify#1{\mag=#1\pagewidth=6.5truein\pageheight=8.7truein
\fullpageheight=9truein\setpage}
\def\setpage{\hsize\pagewidth\vsize\pageheight} % use after changing page size
\def\lheader{\mainfont\the\pageno\eightrm\qquad\rhead\hfill\title\qquad
\tensy x\mainfont\topmark} % top line on left-hand pages
\def\rheader{\tensy x\mainfont\topmark\eightrm\qquad\title\hfill\rhead
\qquad\mainfont\the\pageno} % top line on right-hand pages
\def\page{\box255 }
\def\normaloutput#1#2#3{\ifodd\pageno\hoffset=\pageshift\fi
\shipout\vbox{
\vbox to\fullpageheight{
\iftitle\global\titlefalse
\else\hbox to\pagewidth{\vbox to10pt{}\ifodd\pageno #3\else#2\fi}\fi
\vfill#1}} % parameter #1 is the page itself
\global\advance\pageno by1}
\def\rhead{\.{DOCMAC} OUTPUT} % this running head is reset by starred sections
\def\title{} % an optional title can be set by the user
\def\contentspagenumber{0} % default page number for table of contents
\newif\iftitle
\def\topofcontents{\centerline{\titlefont\title}
\vfill} % this material will start the table of contents page
\def\botofcontents{\vfill} % this material will end the table of contents page
\def\contentsfile{\jobname.toc} % file that gets table of contents info
\def\readcontents{\expandafter\input \contentsfile}
\newwrite\cont
\output{\setbox0=\page % the first page is garbage
\openout\cont=\contentsfile
\global\output{\normaloutput\page\lheader\rheader}}
\setpage
\vbox to \vsize{} % the first \topmark won't be null
\def\con{%
\write\cont{} % ensure that the contents file isn't empty
\closeout\cont % the contents information has been fully gathered
\par\vfill\eject % finish the preceding page
\rightskip 0pt \hyphenpenalty 50 \tolerance 200
\setpage
\output{\normaloutput\page\lheader\rheader}
\titletrue % prepare to output the table of contents
\pageno=\contentspagenumber \def\rhead{TABLE OF CONTENTS}
\message{Table of contents:}
\topofcontents
\line{\hfil Section\hbox to3em{\hss Page}}
\def\Z##1##2##3{\line{\ignorespaces##1
\leaders\hbox to .5em{.\hfil}\hfil\ ##2\hbox to3em{\hss##3}}}
\readcontents\relax % read the contents info
\botofcontents \end} % print the contents page(s) and terminate
\let\contentspage=\con
\catcode`\@=\atcode
\catcode`\_=\uscode
\endinput